package com.bestdreamer.example.syncContainer;

import com.bestdreamer.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;

import java.util.Iterator;
import java.util.Vector;

/**
 * foreach 和 Iterator 在遍历是不要进行更新操作，否则会抛出异常，应该在遍历时对相应的数据进行标记，遍历完之后再进行相应的操作
 */
@Slf4j
@NotThreadSafe
public class VectorExample3 {

    // foreach
    // java.util.ConcurrentModificationException
    private static void test1(Vector<Integer> v1){
        for(Integer i : v1){
            if(i.equals(3)){
                v1.remove(i);
            }
        }
    }

    //迭代器
    //java.util.ConcurrentModificationException
    private static void test2(Vector<Integer> v1){
        Iterator<Integer> iterator = v1.iterator();
        while(iterator.hasNext()){
            Integer i = iterator.next();
            if(i.equals(3)){
                v1.remove(i);
            }
        }
    }
    // for 循环
    private static void test3(Vector<Integer> v1){
        for(int i = 0; i < v1.size(); i++){
            if(v1.get(i).equals(3)){
                v1.remove(i);
            }
        }
    }

    public static void main(String[] args){
        Vector<Integer> vector = new Vector<>();
        vector.add(1);
        vector.add(2);
        vector.add(3);
        test3(vector);
    }
}
